package w83b.w83bOperacionesPaso.w83bIncidencias;

import java.util.ArrayList;
import java.util.GregorianCalendar;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.lang.StringUtils;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import w83b.w83bBeans.W83bIncidenciasBean;
import w83b.w83bUtilidadesComunes.W83bClsConstantes;
import es.ejie.frmk.presentacion.operacion.paso.Q70ActionPasoOP;
import es.ejie.frmk.presentacion.sesiondatos.Q70ContextoEJIE;

// TODO: Auto-generated Javadoc
/**
 * The Class W83bTablaAgrupacionesOP.java.
 *
 * @author Deusto Sistemas
 */
public class W83bValidarFechaIncidenciasOPAction extends Q70ActionPasoOP{

	
	protected void processOP(Q70ContextoEJIE contexto, ActionErrors errores, ActionMapping mapping,
			ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
		String seleccionados = (String)request.getParameter("seleccionados");
		String[] seleccionado = seleccionados.split("__");
		String fechaValidacion = (String)request.getParameter("fechaValidacion");
		
		List listaIncidencias = (ArrayList)contexto.get("w83bListaIncidencias");
		
		contexto.set("w83bResultado","");
		List listaIncidenciasValidacion = new ArrayList();
				
		for(int i=0,size=seleccionado.length;i<size;i++){
			String index = seleccionado[i].replaceAll("jqg_", "");
			W83bIncidenciasBean incidencia = (W83bIncidenciasBean)listaIncidencias.get(Integer.parseInt(index));
			
			if(StringUtils.isNotEmpty(incidencia.getNumRegDef())||
					StringUtils.isNotEmpty(incidencia.getFechaRegDef())){			
				String fecha = incidencia.getFechaEntrada();
				
				int mesFechaEntrada;
				int anyoFechaEntrada;
				
				int mesHoy;
				int anyoHoy;
				
				if(W83bClsConstantes.CONSTANTE_CASTELLANO.equals((String)contexto.get(W83bClsConstantes.CONSTANTE_CONTEXTO_IDIOMA))){
					GregorianCalendar  fechaHoy = new GregorianCalendar();//NOPMD
					
					fechaHoy.set(Integer.parseInt(fechaValidacion.split("/")[2]),
							Integer.parseInt(fechaValidacion.split("/")[1])-1, 
							Integer.parseInt(fechaValidacion.split("/")[0]));
					
					
					
					mesHoy = fechaHoy.get(GregorianCalendar.MONTH)+1;
					anyoHoy = fechaHoy.get(GregorianCalendar.YEAR);
					mesFechaEntrada = Integer.parseInt(fecha.split("/")[1]);
					anyoFechaEntrada = Integer.parseInt(fecha.split("/")[2]);
				}else{
					GregorianCalendar  fechaHoy = new GregorianCalendar();//NOPMD
					
					fechaHoy.set(Integer.parseInt(fechaValidacion.split("/")[0]),
							Integer.parseInt(fechaValidacion.split("/")[1])-1, 
							Integer.parseInt(fechaValidacion.split("/")[2]));
					
					mesHoy = fechaHoy.get(GregorianCalendar.MONTH)+1;
					anyoHoy = fechaHoy.get(GregorianCalendar.YEAR);
					mesFechaEntrada = Integer.parseInt(fecha.split("/")[1]);
					anyoFechaEntrada = Integer.parseInt(fecha.split("/")[0]);	
				}
				
				if(anyoHoy<anyoFechaEntrada||(anyoHoy==anyoFechaEntrada&&mesHoy<=mesFechaEntrada)){
					prepararResultadoValida(contexto,incidencia.getNumIncidenciaCompleto());	
				}		
				else{
					incidencia.setFechaValidacion(fechaValidacion);
					incidencia.setIdioma((String)contexto.get(W83bClsConstantes.CONSTANTE_CONTEXTO_IDIOMA));
					for(int j=0,size2=listaIncidenciasValidacion.size();j<size2;j++){
						W83bIncidenciasBean incidenciaTemp = (W83bIncidenciasBean)listaIncidenciasValidacion.get(j);
						
						if((Integer.parseInt(incidencia.getAnyoIncidencia())<Integer.parseInt(incidenciaTemp.getAnyoIncidencia()))
								||
								(Integer.parseInt(incidencia.getAnyoIncidencia())==Integer.parseInt(incidenciaTemp.getAnyoIncidencia())
										&&
										Integer.parseInt(incidencia.getNumIncidencia())<Integer.parseInt(incidenciaTemp.getNumIncidencia())
										)
								){			
							listaIncidenciasValidacion.add(j,incidencia);
							break;
						}
						if(j+1==size2){
							listaIncidenciasValidacion.add(incidencia);				
						}
					}
					if(0==listaIncidenciasValidacion.size()){
						listaIncidenciasValidacion.add(incidencia);				
					}
				}
			}else{
				prepararResultadoValida(contexto,incidencia.getNumIncidenciaCompleto());
			}
		}
		listaIncidenciasValidacion.add(contexto.get(W83bClsConstantes.CONSTANTE_CONTEXTO_USUARIO));
		contexto.set("w83bListaIncidenciasValidacion",listaIncidenciasValidacion);


	}
	
	private boolean prepararResultadoValidacion(Q70ContextoEJIE contexto, String resultado){
		StringBuffer resultadoCtx = new StringBuffer((String)contexto.get("w83bResultado"));
		boolean fin = false;
		
		if(!"-2".equals(resultadoCtx.toString())){
			contexto.set("w83bResultado", resultadoCtx.append(resultado).toString());
		}else{
			contexto.set("w83bResultado", new StringBuffer(resultado).append(resultadoCtx).toString());			
		}
		
		fin = ((String)contexto.get("w83bResultado")).split("-").length==3;
		
		return fin;
	}
	/**
	 * 
	 * @param contexto
	 * @param resultado
	 */
	private void prepararResultadoValida(Q70ContextoEJIE contexto, String resultado){
		StringBuffer resultadoCtx = new StringBuffer((String)contexto.get("w83bResultado"));
		if (-1==resultadoCtx.indexOf("ERROR")){
			contexto.set("w83bResultado", "ERROR <li>"+resultadoCtx.append(resultado).toString()+"</li>");
		}
		else{
			contexto.set("w83bResultado", resultadoCtx.append("<li> "+resultado).toString()+"</li>");
		}
	}

	protected ActionForward processForward(Q70ContextoEJIE contexto, ActionErrors errors, ActionMapping mapping, 
			ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
		List listado=(List)contexto.get("w83bListaIncidenciasValidacion");
		//se elimina del listado el usuario xlnets
		
		if(!"".equals(contexto.get("w83bResultado"))){
			if (listado==null || listado.size()-1<=0)
				return mapping.findForward("volverConError");
			else
				return mapping.findForward("ok");			
		}else{
			return mapping.findForward("ok");			
		}
	}

}
